package com.itheima.stock.service;

import com.itheima.stock.common.domain.*;
import com.itheima.stock.pojo.StockBusiness;
import com.itheima.stock.vo.req.PageResult;
import com.itheima.stock.vo.res.R;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * 定义股票服务接口
 */

public interface StockService {

    /**
     * 查询所有的主营业务信息
     * @return
     */
    List<StockBusiness> findAll();


    /**
     * 获取最新的国内大盘详情
     *
     * @return
     */
    R<List<InnerMarketDomain>> getInnerMarketInfos();


    /**
     * 查询最近最新的板块信息
     * @return
     */
    R<List<StockBlockDomain>> getstockBlockInfo();


    /**
     * 统计A股最新的交易数据，并按照涨幅去前10
     * @return
     */
    R<List<StockUpdownDomain>> getStockInfoByIncrease();


    /**
     * 分页查询股票数据
     * @param page 当前页
     * @param pageSize 每页大小
     * @return
     */
    R<PageResult<StockUpdownDomain>> getStockByPage(Integer page, Integer pageSize);

    /**
     * 统计T日每分钟股票的涨停跌停数据
     * @return
     */
    R<Map> getStockUpdownCount();


    /**
     * 股票数据导出到excel中
     * @param response  响应体对象
     * @param page  当前页
     * @param pageSize  每页大小
     */
    void exportStockInf4Excel(HttpServletResponse response, Integer page, Integer pageSize);

    /**
     *统计当前时间下（精确到分钟），股票在各个涨幅区间的数量
     * @return
     */
    R<Map> getStockUpDownScopeNum();


    /**
     * 通过T日和T-1日大盘成交量对比数据
     * @return
     */
    R<Map<String, List>> getStockCompareTradeVol();

    /**
     * 查询股票的分时数据
     * @param stockCode
     * @return
     */
    R<List<Stock4MinuteDomain>> getStockScreenTimeSharing(String stockCode);


    /**
     * 查询股票日K信息
     * @param stockCode
     * @return
     */
    R<List<Stock4EvrDayDomain>> getStockScreenDayKLine(String stockCode);

    /**
     * 获取个股最新分时行情数据，包含开盘价、前收盘价、最新价、最高价、最低价、成交金额和成交量信息
     * @param stockCode 股票编码
     * @return
     */
    R<Map> getStockSecondDetail(String stockCode);

    /**
     * 外盘指数
     * 外盘指数行情查询，根据时间取前4
     * @return
     */
    R<List<Map>> getExternalIndex();

    /**
     * 格局输入的个股代码，进行模糊查询，返回证券代码和证券名称
     * @param searchStr 个股代码模糊搜索
     * @return
     */
    R<List<Map>> searchStock(String searchStr);

    /**
     * 根据股票编号获取所对应的公司详情信息
     * @param stockCode
     * @return
     */
    R<Map> getStockDescribe(String stockCode);


    /**
     * 单个个股周k线数据：包含股票ID，最高价 最低价 开盘价 收盘价 均价
     * 具体：最高和最低是一周内的
     *      开盘与收盘分别对应周1的看盘价格和周五的收盘价格
     *      均价就是一周的平均价格
     *      日期：一周内的最大日期，一般是周五
     * @param stockCode 股票编码
     * @return
     */
    R<List<Map>> getWeekLinData(String stockCode);

    /**
     * 获取个股实时交易流水信息，按照时间降序排序，取前10
     * 单个个股秒级行情数据查询，查询当前分钟内的秒级数据（我们当前一分钟为单位获取数据）
     * @param code 股票编码
     * @return
     */
    R<List<Map>> getStockScreenSecond(String code);
}
